/**
 * 操作日志工具类
 * 用于记录系统中的重要操作，便于审计和追踪
 */

import request from './request.js';
import store from '@/store/index.js';

/**
 * 日志模块常量定义
 */
export const LOG_MODULE = {
  GROUP: '集团管理',
  BUSINESS_BASIC: '基础信息管理',
  BUSINESS_FOLLOW: '成员跟进',
  BUSINESS_EXPANSION: '信息化拓展',
  STATISTICS: '数据统计',
  TODO: '待办事项',
  SYSTEM: '系统管理'
};

/**
 * 操作类型常量定义
 */
export const LOG_ACTION = {
  CREATE: '新增',
  UPDATE: '修改',
  DELETE: '删除',
  VIEW: '查看',
  EXPORT: '导出',
  LOGIN: '登录',
  LOGOUT: '登出',
  OTHER: '其他'
};

/**
 * 目标对象类型常量定义
 */
export const TARGET_TYPE = {
  GROUP: '集团单位',
  BASIC_INFO: '基础信息',
  MEMBER_FOLLOW: '成员跟进',
  PRODUCT_EXPANSION: '产品拓展',
  EXPANSION_FOLLOW: '拓展跟进'
};

/**
 * 记录操作日志
 * @param {Object} options 日志参数
 * @param {String} options.module 操作模块
 * @param {String} options.action 操作类型
 * @param {String} options.targetType 目标对象类型
 * @param {Number|String} options.targetId 目标对象ID
 * @param {String} options.targetName 目标对象名称
 * @param {String|Object} options.content 操作内容详情
 * @return {Promise} 日志记录结果
 */
export const logOperation = async (options) => {
  try {
    // 获取当前登录用户信息
    const userInfo = store.state.vuex_user || {};
    
    // 获取设备信息
    const systemInfo = uni.getSystemInfoSync();
    
    // 构建日志数据
    const logData = {
      manager_id: userInfo.id || 0,
      module: options.module || '',
      action: options.action || '',
      target_type: options.targetType || '',
      target_id: options.targetId || null,
      target_name: options.targetName || '',
      content: typeof options.content === 'object' ? JSON.stringify(options.content) : (options.content || ''),
      device_info: `${systemInfo.platform} ${systemInfo.system} ${systemInfo.model}`
    };
    
    // 调用API记录日志
    return await request.sendRequest('operation-logs', 'POST', logData);
  } catch (error) {
    console.error('记录操作日志失败', error);
    // 本地日志记录失败不影响业务流程，因此返回成功
    return { success: false, error: error.message };
  }
};

/**
 * 记录业务操作日志的简化方法
 * @param {String} action 操作类型
 * @param {String} targetType 目标对象类型
 * @param {Object} targetInfo 目标对象信息 {id, name}
 * @param {String|Object} content 操作内容
 * @param {String} module 操作模块，可选，默认根据targetType自动判断
 */
export const logBusinessOperation = (action, targetType, targetInfo, content, module) => {
  // 根据目标类型自动判断所属模块
  let autoModule = module;
  if (!autoModule) {
    switch (targetType) {
      case TARGET_TYPE.GROUP:
        autoModule = LOG_MODULE.GROUP;
        break;
      case TARGET_TYPE.BASIC_INFO:
        autoModule = LOG_MODULE.BUSINESS_BASIC;
        break;
      case TARGET_TYPE.MEMBER_FOLLOW:
        autoModule = LOG_MODULE.BUSINESS_FOLLOW;
        break;
      case TARGET_TYPE.PRODUCT_EXPANSION:
      case TARGET_TYPE.EXPANSION_FOLLOW:
        autoModule = LOG_MODULE.BUSINESS_EXPANSION;
        break;
      default:
        autoModule = LOG_MODULE.SYSTEM;
    }
  }
  
  return logOperation({
    module: autoModule,
    action: action,
    targetType: targetType,
    targetId: targetInfo?.id || null,
    targetName: targetInfo?.name || '',
    content: content
  });
};

export default {
  LOG_MODULE,
  LOG_ACTION,
  TARGET_TYPE,
  logOperation,
  logBusinessOperation
}; 